#ifndef _SG_TYPE_H_
#define _SG_TYPE_H_

#include "../lcd_drivers/lcd_type.h"

// 坐标
typedef struct _sg_coord
{
    u16 x;
    u16 y;
}sg_coord_t;

// 控件状态
typedef enum _sg_st
{
    SG_ST_NORMAL,   // 常规状态
    SG_ST_HIDE      // 隐藏，使用背景色填充这块区域
}sg_st_t;



// 提前申明 sg_page_base_t
typedef struct _sg_page_base sg_page_base_t;

// 事件代码
typedef enum _sg_ev_code
{
    SG_EV_PAGE_LOADED,      // 页面已加载
    SG_EV_PAGE_UNLOADED,    // 页面已经关闭（稍后删除）
    SG_EV_TIMER_UPDATE,     // 定时时间到（软定时器）
    SG_EV_RECEIVED_PKG,     // 收到一包数据
    _SG_EV_END
}sg_ev_code_t;

// 事件
typedef struct _sg_ev
{
    sg_page_base_t * Target;    // 通知目标对象，通常是当前页面
    sg_ev_code_t Code;      // 事件代码
    void * UserData;        // 用户数据
}sg_ev_t;

// 页面创建函数类型
typedef sg_page_base_t * (*sg_page_creat_fun_t)(void *param);

// 页面删除函数类型
typedef void (*sg_page_delete_fun_t)(sg_page_base_t *page);

// 页面事件回调函数类型
typedef void (*sg_cb_t)(sg_ev_t * e);


// 页面基类，自定义页面数据需要继承本类
typedef struct _sg_page_base
{
    // sg_page_creat_fun_t CreatFun;    // 页面创建函数，调用这个函数来创建页面
    sg_page_delete_fun_t DeleteFun;     // 页面删除函数，调用这个函数来删除页面
    sg_cb_t CallBack;                   // 页面事件回调函数
    void * UserData;                    // 用户数据
}sg_page_base_t;


#endif
